OpenGL踩坑实录

关于Context

要想使用OpenGL,必须先行创建并激活一个OpenGL Context,在多线程的情况下,若多个线程都想要使用OpenGL,那么有以下两个选项来避免Context的冲突。

  1. 使用共享上下文。在进行glfwCreateWindow的时候,最后一个参数便是要共享的上下文的指针。
  2. 加锁。一个进程,必须如如下代码所示:
ctx_mutex.lock();

glfwMakeContextCurrent(cur_ctx);
/***
	do something
***/
glfwMakeContextCurrent(nullptr);

ctx_mutex.unlock();

否则有可能修改到其他线程的上下文。 除开这个问题,不同上下文间,所有资源都是不共享的,因此在编写各种渲染类时,需要按照不同的线程申请不同的资源。要不就在使用glfwCreateWindow时启用共享上下文。